// 1. 字符串和数字相加，将数字隐式转换为字符串。

// 2. 字符串、数字和布尔值进行比较，布尔值会隐式转换为数字，true 转换为 1，false 转换为 0，然后再和字符串或数字进行比较。

// 3. 数组和原始值进行比较，将数组隐式调用 toString() 方法，将其转换为字符串。

// 4. 对象和原始值进行比较，将对象隐式调用 valueOf() 方法，如果返回的是一个原始值，则使用该值进行比较，否则将隐式调用 toString() 方法将其转换为字符串。

// 5. 对象和对象进行比较，将对象隐式调用 valueOf() 方法，如果返回的是一个原始值，则使用该值进行比较，否则将隐式调用 toString() 方法将其转换为字符串，然后再进行比较。

// 6. 运算符优先级高的类型会优先进行隐式转换，例如加法运算符比较运算符的优先级高，因此会先将数字转换为字符串，然后再和另一个字符串进行拼接。
let a = {
    i: 1,
    valueOf: function() {
      return this.i++;
    }
  };
  
  if (a == 1 && a == 2 && a == 3) {
    console.log("a == 1 && a == 2 && a == 3");
  }